import Widget from '../widgets'
import apis from './apis'
import routes from './routes'
import './push'
import md5 from 'md5'
import base64Encoder from 'base64-encoder'
import jsonStringify from 'fast-json-stable-stringify'
import config from './application_config'
import utils from '../utils/utils'


// Vue.prototype.$notice.alert({message:JSON.stringify(routes)})
new Widget({
    router: {routes:routes},
    ajax: {
        /**
         * 前缀地址
         */
        baseUrl: config.MOCK_IS_OPEN ? config.MOCK_BASE_API:config.BASE_API,
        /**
         * 接口别名
         */
        apis:apis,
        // 接口超时时间
        timeout: 30000,

        /**
         * 请求发送统一拦截器 （可选）
         * options 你请求传入的所有参数和配置
         * next
         */
        requestHandler (options, next) {


            var param = options.data

            if (options.progress == undefined || options.progress == null) {
                Vue.prototype.$notice.loading.show('请求中')
            }

            //设置传参格式
            var paramData = new Object()

            var platform = weex.config.env.platform.toLowerCase()

            if (platform == 'android') {
                paramData.deviceType = '1000'
            } else if (platform == 'ios') {
                paramData.deviceType = '1100'
            } else if (platform == 'web') {
                paramData.deviceType = '1300'
            }

            if (!param) {
                param = {}
            }
            paramData.reqData = param

            //token
            var sid = Vue.prototype.$storage.getSync('sid')
            if (sid != undefined && sid != null && sid != '') {
                paramData.sid = sid
            }
            var reqData = new Object()
            utils.removeJsonNull(paramData)
            reqData.data = jsonStringify(paramData)

            var strMd = md5(jsonStringify(paramData))

            reqData.signData = base64Encoder.Base64.encode(strMd)

            options.data = reqData
            options.header = {
                'content-type':'application/x-www-form-urlencoded',
            }
            next()
        },
        /**
         * 请求返回统一拦截器 （可选）
         * options 你请求传入的所有参数和配置
         * resData 服务器端返回的所有数据
         * resolve 请求成功请resolve你得结果，这样请求的.then中的成功回调就能拿到你resolve的数据
         * reject 请求成功请resolve你得结果，这样请求的.then中的失败回调就能拿到你reject的数据
         */
        responseHandler (options, resData, resolve, reject) {
            const { status, data } = resData


            if (options.progress == undefined || options.progress == null) {
                Vue.prototype.$notice.loading.hide()
            }
            if (status !== 200) {
                Vue.prototype.$notice.toast({message:data.msg})
                reject(resData)
            } else {
                //失败
                if (data.status === 0) {
                    Vue.prototype.$notice.toast({message:data.msg})
                    reject(resData)
                }else if(data.status === 1){
                    resolve(data.data)
                }else{
                    //重新登录
                    Vue.prototype.$router.open({
                        name:'login',
                        navShow:false
                    })
                }

                resolve(data);
            }
        }
    }
})
